第二階段的系統需求和介面已經完成,過程中有發現一些問題,因此除了新的需求需要實作以外,我們也需要調整一下系統架構。
前兩天剛部署上去的服務,有一些安全性問題,在第二階段開始實作前,也需要先處理一下。
第二個階段,我們將往前後端分離邁進,Djano
本身就有辦法設計後端的API,也有辦法提供前端頁面,在這個階段我們先都使用Django內建的功能做到下列圖示的結果。前端有單純的HTML
CSS
JS
程式碼,並且透過API跟 後端要資料,並顯示在畫面上。
箭頭表示,使用者可以存取到前端的頁面。
而前端頁面,可以透過後端API抓到資料。
我們增加了過濾器的功能,因此新增一個標籤的資料類型(Tag),用來表示各式各樣的標籤,而一家店會有多種的標籤
(像是台南小巷中的[小鳥不吃肉](https://www.facebook.com/VeggieBirds/)
同時就會有全素
、中式
、內用
、冷氣
等標籤)。因此店家與標籤的關係是多對多的關係,因此可以畫成下方的圖表。
https://docs.djangoproject.com/en/3.2/howto/deployment/checklist/
SECRET_KEY
是Django用來加密的,如果被他人知道,就有辦法解密瀏覽器與伺服器之間溝通的資訊,造成安全性疑慮。一般來說當然不會被知道,但是像是我們將程式碼上傳至github這種公開的平台,就相當不妥,因此也需要重新設定一下。
關閉Debug模式
部署在這裡的網站,如果亂按的話,會出現Django預設的錯誤資訊,這其實是很危險的,因為駭客能因此知道運作的環境與伺服器的詳細資料。
需要把 DEBUG 改成 False才行
# mysite/settings.py
DEBUG = False
admin 路徑
Django 自帶後台功能,相當的方便,不過只要能輸入帳號密碼的地方,就有安全的疑慮,我們可以用強力的帳號密碼來防止駭客入侵,但是能不被攻擊總是好的。因此我們可以更改預設的管理入口,減少被攻擊的機會。
# mysite/urls.py
urlpatterns = \
[
path('my-custom-admin/', admin.site.urls),
path('food/', include('food.urls')),
path('', index)
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
因為我們會將程式碼上傳至公開平台,因此不能在settings.py
放入敏感資訊,這時我們可以使用環境變數來管理開發環境和生產環境,不同的設定檔。以下用DEBUG
參數為例
建立.env
DEBUG='False'
安裝 python-dotenv
pip install python-dotenv
在settings.py中匯入 .env
from dotenv import load_dotenv
load_dotenv(Path.joinpath(BASE_DIR, '.env')) # take environment variables from .env.
if os.getenv('DEBUG') == 'False':
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = False
else:
DEBUG = True
記得.env
是不能列入git管理的喔
開發環境中和生產環境的.env內容可能會不同,因此也可以放入敏感的資料庫帳號密碼等。
接下來就要開始第二階段啦,請大家敬請期待。
[原來後端要知道] 什麼是前後端分離? https://ithelp.ithome.com.tw/articles/10231011
部署注意事項
https://docs.djangoproject.com/en/3.2/howto/deployment/checklist/
台南不需要米其林
- 專案網址
- 專案程式碼
- 專案文件與鐵人賽文章
- 參賽團隊 台南巷弄美食獵人